#ifndef LIGHTCONTROLLER_H
#define LIGHTCONTROLLER_H

#include <QObject>
#include "serialporthandler.h"
#include "light.h"
#include <QDebug>

// 灯光控制器类，继承自QObject
class LightController : public QObject
{
    Q_OBJECT
public:
    // 构造函数，显式声明，可选参数为父对象指针
    explicit LightController(QObject *parent = nullptr, SerialPortHandler *serialPortHandler = nullptr);
    // 析构函数
    ~LightController();

    // 枚举类型，用于选择通道
    enum Channel {
        A = 1,
        B = 2,
        C = 4,
        D = 8,
        All = 15
    };
    Q_DECLARE_FLAGS(Channels, Channel)
    Q_FLAG(Channels)

    // 初始化函数，用于初始化光源对象
    void init(Channels channels);
    // 关闭函数，用于关闭光源对象
    void close();




public slots:
    // 公共槽函数声明

    // 设置亮度函数，用于设置单个或多个通道的亮度
    void setBrightness(const QString & face, uint8_t value);
    // 读取亮度函数，用于读取单个或多个通道的亮度
    uint8_t getBrightness(const QString & face);
    
signals:
    // 信号声明

private:
    // 串口通信处理器对象指针，用于处理串口通信
    SerialPortHandler *m_serialPort_4 = nullptr;
    SerialPortHandler *m_serialPort_2 = nullptr;

    // // 光源对象指针，用于控制光源的亮度
    // Light *m_light;

    // // 光源对象数组，用于控制多个光源的亮度
    // QMap<QString, Light*> m_lights;

    // // 光源对象数组，用于控制多个光源的亮度
    // Light m_Lights[5] = nullptr;

    
    Light m_topLight_A(this, "顶部光源A", "A", 0);
    Light m_topLight_B(this, "顶部光源B", "B", 0);
    Light m_sideLight_C(this, "侧面光源C", "C", 0);
    Light m_sideLight_D(this,"侧面光源D", "D", 0);
    Light m_bottomLight_A(this,"底部光源A", "A", 0);
    Light m_sideFillLight_B(this, "侧面补光C", "B", 0);
};

Q_DECLARE_OPERATORS_FOR_FLAGS(LightController::Channels)

#endif // LIGHTCONTROLLER_H